[アップデート] AWS CloudFormation の Git 同期構成時にリポジトリとリソースの同期ステータス変更イベントが EventBridge で取得できるようになりました

[アップデート] AWS CloudFormation の Git 同期構成時にリポジトリとリソースの同期ステータス変更イベントが EventBridge で取得できるようになりました

Clock Icon2024.08.01

いわさです。

AWS CloudFormation には Git 同期という機能があります。
2 年前の re:Invent 2023 あたりで登場した機能で、外部の Git リポジトリのテンプレートと CloudFormation スタックを同期させることが出来ます。

https://dev.classmethod.jp/articles/cloudformation-git-sync-update/

先日のアップデートでリポジトリ同期ステータスとリソース同期ステータスの変更イベントが EventBridge 経由で取得出来るようになったそうです。

https://aws.amazon.com/about-aws/whats-new/2024/07/build-event-driven-application-aws-cloudformation/

このイベント変更をトリガーに追加のデプロイを行うパターンがあまり想像出来ない(スタックの変更イベントなどを使うほうが自然な気がする)ので、おそらくは主に同期ステータスの監視用途で使うことになるのではと思っています。
試しに使ってみたところ、いつもとは違うイベントソースで「おっ」と思ったのでちょっと紹介したいと思います。

Git 同期された CloudFormaiton スタックを用意

まずは Git 同期された CloudFormation スタックが検証の中で必要になるので用意したいと思います。
細かい手順は今回は割愛しますが、次のリポジトリに必要なデプロイファイルとテンプレートファイルを格納しています。
CloudFormation スタックの内容としては適当な VPC が作成されるだけです。

https://github.com/Tak1wa/hoge0801-cfn-gitsync

マネジメントコンソールから CloudFormation スタックを新規作成します。
作成する際のテンプレートソースの選択で「Git から同期」を選択します。

1A4940E3-78B8-418C-B8EE-FC4F24301936_1_105_c

あとはデプロイファイルやらを選択してスタックを作成します。
CodeConnection 接続周りの認証・認可が問題なければ次のようにスタック作成後に同期に成功するはずです。

9A44314F-0FEC-4D89-8D5D-B4C24DFBF6A6_1_105_c

まぁここまでは従来どおりです。

EventBridge でルールを設定する

ここからが今回のアップデートで出来るようになった点です。
EventBridge で同期ステータス変更イベントをフックするルールを作成出来るようになりました。

今回のアップデートではリポジトリ同期ステータスと、リソース同期ステータスの2つのイベントが取得できます。

各イベントデータの仕様は次のドキュメントに記載されています。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/event-detail-respository-sync-status-change.html

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/event-detail-resource-sync-status-change.html

設定方法ですが、早速イベントパターンが既に提供されていますのでそちらを使うことが出来ます。

一点注意点がありまして、イベントソースは「CloudFormation」でも「AWS CodeStar Connections」でもなくて、「CodeConnections」であることに注意しましょう。

34A60F80-DA57-4138-92B4-6FDD22C04972_4_5005_c

このイベントパターンの場合は次のイベントタイプが選択出来るようになっています。

  • GitSync Repository Sync Status Change
  • GitSync Resource Sync Status Change

296F1CB9-1037-4678-9B51-878F5A96B533

今回はこちらのイベントをトリガーに SNS への通知を行うだけの単純なアクションを設定しました。

同期変更イベントを発生させてみる

では同期変更イベントを発生させてみます。
ここではリポジトリ構成を変更することで、再同期が発生してステータス変更が行われるのでその方法を使ってみます。

A1F4E16A-4227-4152-A897-260A0ED885EE

変更後即座にイベントを受信していました。
2つイベントが発生しており、ステータスを見てみるとINITIATEDステータスが最初に発生し、その後SUCCEEDEDステータスに変更されたことが確認出来ます。

{
    "version": "0",
    "id": "b692759e-02e9-9f95-0f05-f9376532d20a",
    "detail-type": "GitSync Repository Sync Status Change",
    "source": "aws.codeconnections",
    "account": "123456789012",
    "time": "2024-07-31T22:34:01Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:codestar-connections:ap-northeast-1:123456789012:connection/672805cc-55cf-4884-99b4-51cafe769da8"
    ],
    "detail": {
        "connectionArn": "arn:aws:codestar-connections:ap-northeast-1:123456789012:connection/672805cc-55cf-4884-99b4-51cafe769da8",
        "providerType": "GITHUB",
        "repositoryName": "hoge0801-cfn-gitsync",
        "repositoryArn": "arn:aws:codestar-connections:ap-northeast-1:123456789012:repository-link/41cbb6e1-71f6-47c3-ad61-92652a1b2afb",
        "repositoryLinkId": "41cbb6e1-71f6-47c3-ad61-92652a1b2afb",
        "ownerId": "Tak1wa",
        "commit": null,
        "branch": "main",
        "syncType": "CFN_STACK_SYNC",
        "status": "INITIATED",
        "previousStatus": null
    }
}
{
    "version": "0",
    "id": "f1f39180-2125-74e7-2730-2f09fd5a2963",
    "detail-type": "GitSync Repository Sync Status Change",
    "source": "aws.codeconnections",
    "account": "123456789012",
    "time": "2024-07-31T22:34:05Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:codestar-connections:ap-northeast-1:123456789012:connection/672805cc-55cf-4884-99b4-51cafe769da8"
    ],
    "detail": {
        "connectionArn": "arn:aws:codestar-connections:ap-northeast-1:123456789012:connection/672805cc-55cf-4884-99b4-51cafe769da8",
        "providerType": "GITHUB",
        "repositoryName": "hoge0801-cfn-gitsync",
        "repositoryArn": "arn:aws:codestar-connections:ap-northeast-1:123456789012:repository-link/41cbb6e1-71f6-47c3-ad61-92652a1b2afb",
        "repositoryLinkId": "41cbb6e1-71f6-47c3-ad61-92652a1b2afb",
        "ownerId": "Tak1wa",
        "commit": "4915887d7f67d31c49381ee5c40d6cb9ee1c4a43",
        "branch": "main",
        "syncType": "CFN_STACK_SYNC",
        "status": "SUCCEEDED",
        "previousStatus": "INITIATED"
    }
}

エラーとかのイベントや紐づくデータも取得出来ますね。
取得出来るイベントについては AWS CLI のステータス取得コマンドを参考にすると良さそうでした。

https://docs.aws.amazon.com/cli/latest/reference/codeconnections/get-repository-sync-status.html

さいごに

本日は AWS CloudFormation の Git 同期構成時にリポジトリとリソースの同期ステータス変更イベントが EventBridge で取得できるようになったので試してみました。

Git 同期でリソース管理している際に、プルリクエストは処理されたが実は同期部分で失敗していた。みたいなのはインパクトがあるので、監視には特に使えそうですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.